25 项目开发的前期设计
项目中需要思考的问题:开发流程的定义;平台与框架的选择;目录结构及源码管理;嵌入式产品的开发效率。
开发流程的定义
什么是软件开发流程?
通过一系列步骤保证软件产品的顺利完成,软件产品在生命期内的管理方法学。
软件开发流程的本质
开发流程与具体技术无关;开发流程是开发团队必须遵守的规则。
瀑布模型(Waterfall Model)
通过自上而下的步骤进行软件开发;每个开发步骤都是不可逆的。
增量模型(Incremental Model)
将系统功能分解为互不重叠的子功能;每次全力实现一个子功能;子 功能全部完成后系统开发结束
螺旋模型(Spiral Model)
采用一种迭代的方法来进行系统开发;项目分解成多个不同的版本完成;每个版本的开发过程都需要用户参与;根据前一个版本的反馈计划计划下一个版本。
敏捷模型(Agile Modeling)
一切从简;拥抱变化;高效工作;持续开发。
从目前的开发角度来讲,最容易改变的就是用户的需求。很有可能用户上一秒要这样的功能,下一秒就改变了。为什么会这样呢?因为现在是一个信息万变的时代。用户开发软件是为了解决自己的业务问题,而他们的业务可能会因为各种原因产生变化。那什么时候会发生改变,大家都说不清楚。所以呢,就想出了这么个模型。
这个模型的关键在于Iterations,Demo &Feedback
,就是开发团队直接深入到用户内部去。和用户在一起开发这个软件。那这样的好处是,只要用户想要的东西发生了改变,那么开发团队立马就能直到。这样就能减少开发中的无用功,提升开发效率
每一种开发模型的提出,都是为了更好的开发出满足用户需求的产品。提高这一点的方式就是提高用户在软件开发过程中的参与度。最开始的瀑布模型,只需求在需求分析阶段需要用户参与。而最后的敏捷开发,是需要时时刻刻与用户一起。就是越靠近看客户,开发出的东西就越符合客户的需求。
平台与框架的选择
软件开发平台
开发平台是位于操作系统之上的软件层;开发平台提供更多模块化的功能,简化(加速)软件的开发。
软件开发框架
开发框架是位于开发平台之上的软件层;开发框架是为特定应用所设计的更抽象的软件模块。
平台与框架的示例
Spring/Java
Qt
目录结构及源码管理
目录设计VS源码管理
项目中每个模块的代码用一个文件夹进行管理:文件夹用inc
,src
,makefile
构成。
项目中每个模块的对外函数声明统一放置同一目录。如:commom.h
,xxfunc.h
。
目录设计示例
.
└── Project
├── common
├── libs
│ ├── inc
│ │ ├── dlib.h
│ │ └── slib.h
│ └── lib
│ ├── dlib.so
│ └── slib.a
├── main
└── module
目录设计的意义
书架功能:反映项目中代码的层次感和模块化
意识引导:引导对于新增文件功能,命令以及位置的思考
增强维护性:加快开发人员对项目整体架构的理解
嵌入式产品的开发效率
常规嵌入式开发的方式
存在的问题
开发工程师必须人手一台设备(项目早期可能无法满足);每次代码改动必须到设备进行验证(效率低下);反复多次烧写可能导致设备损坏(不稳定的早期设备)。
常规嵌入式调试的方式
嵌入式开发的调试问题
需要基于额外硬件(JTAG)连接设备进行断点调试;常规日志只能写于文件中,无法实时查看;几乎无法进行现场调试(客户环境调试)。
嵌入式基础设施的建设
架构设计时,模块之间遵循强内聚,弱耦合原则:模块能够基于PC环境编译,并进行单元测试。
开发PC环境中的设备模拟器:产品代码能够在PC环境完整编译并运行于PC环境。
开发产品中可实时输出的日志系统:设备运行日志输出可以实时传输到PC环境。